﻿using System;
using System.Collections.Generic;
using System.Linq;
using TPTecnicas.MessageProcessor.Business;
using TPTecnicas.MessageProcessor.Business.Repositories;
using TPTecnicas.MessageProcessor.Common;

namespace TPTecnicas.MessageProcessor.Persistence
{
    public class InMemoryContext: IUniversityContext
    {

        private readonly IDictionary<string, int> _grupos;
        private readonly IDictionary<string, Ticket> _tickets;
        private readonly List<string> _mails;

        public InMemoryContext()
        {
            _grupos = new Dictionary<string, int>();
            _tickets = new Dictionary<string,Ticket>();
            _mails = new List<string>();
        }

        public void AlumnoAltaMateria(string padron, string nombre, string identificador, string codigoMateria)
        {
            throw new NotImplementedException();
        }

        public bool UsuarioRegistrado(string identificador)
        {
            return true;
        }

        public bool UsuarioEnGrupo(string identificador)
        {
            return false;
        }

        public int CantidadGruposRegistrados()
        {
            return _grupos.Values.Distinct().Count();
        }


        public void RegistrarPadronEnGrupo(string padron, int numeroGrupo)
        {
            _grupos.Add(padron, numeroGrupo);
        }

        public bool TicketCreado(string tema)
        {
            return _tickets.ContainsKey(tema);
        }

        public void CrearTicket(string tema, string mensaje, string estado, string attachment)
        {
            var ticket=new Ticket();
            var fechaActual = DateTime.Now.ToString();
            ticket.Attachment=attachment;
            ticket.Tema=tema;
            ticket.Mensaje=mensaje;
            ticket.Estado = estado;
            ticket.Fecha = fechaActual;
            ticket.Responses = new List<Response>();
            _tickets.Add(tema, ticket);
        }

        public void AgregarRespuestaTicket(string tema, string respuesta)
        {
            var response = new Response();
            var fechaActual = DateTime.Now.ToString();
            response.Fecha = fechaActual; 
            response.Mensaje = respuesta;
            _tickets[tema].Responses.Add(response);
            _tickets[tema].Fecha = fechaActual;
        }

        public void CambiarEstadoTicket(string tema, string estado)
        {
            var fechaActual = DateTime.Now.ToString();
            _tickets[tema].Estado = estado;
            _tickets[tema].Fecha = fechaActual;
        }
        
        public string ObtenerEstadoTicket(string tema)
        {
            return _tickets[tema].Estado;
        }

        public void CrearMail(string titulo, string mensaje, string destinatario, string copia)
        {
            _mails.Add(mensaje);
        }

        public IStudentRepository StudentRepository
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public ISubjectRepository SubjectRepository
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public ITicketRepository TicketRepository
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public IResponseRepository ResponseRepository
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public IGroupRepository GroupRepository
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public IList<Message> MessagesToSend { get; set; }

        public void SaveChanges()
        {
        }
    }
}
